home *** CD-ROM | disk | FTP | other *** search
- unit mleObjectCache;
-
- interface
-
- uses
- Classes, DB, DBTables, SysUtils, dpoBase, mlePropertyInfo;
-
- type
- EInvalidObjectReference = Exception;
-
- TObjectCache = class(TStringList)
- public
- constructor Create;
- destructor Destroy; override;
- procedure Clear; override;
- procedure GetPropertyInfo(aPropertyReference: string; aPropertyInfo: TPropertyInfo);
- function GetPropertyValue(aPropertyName: string): string;
- end;
-
- implementation
-
- { TObjectCache }
-
- procedure TObjectCache.Clear;
- var
- I: Integer;
- begin
- for I := 0 to Count - 1 do
- TDataObject(Objects[I]).Free;
- inherited Clear;
- end;
-
- constructor TObjectCache.Create;
- begin
- inherited;
- Sorted := True;
- Duplicates := dupError;
- end;
-
- destructor TObjectCache.Destroy;
- begin
- Clear;
- inherited;
- end;
-
- procedure TObjectCache.GetPropertyInfo(aPropertyReference: string; aPropertyInfo: TPropertyInfo);
- var
- ObjectName: string;
- I, P: Integer;
- begin
- P := Pos('.', aPropertyReference);
- ObjectName := Copy(aPropertyReference, 1, P - 1);
- I := IndexOf(ObjectName);
- if I = -1 then
- raise EInvalidObjectReference.CreateFmt('Invalid object name: "%s"', [ObjectName]);
- aPropertyInfo.Instance := TDataObject(Objects[I]);
- aPropertyInfo.PropertyName := Copy(aPropertyReference, P + 1, Length(aPropertyReference) - P);
- end;
-
- function TObjectCache.GetPropertyValue(aPropertyName: string): string;
- var
- PropertyInfo: TPropertyInfo;
- begin
- PropertyInfo := TPropertyInfo.Create;
- try
- GetPropertyInfo(aPropertyName, PropertyInfo);
- Result := PropertyInfo.AsString;
- finally
- PropertyInfo.Free;
- end;
- end;
-
- end.
-